package _14CompositeDesignPattern;

import java.awt.*;
import java.util.List;

/**
 * 透明组合模式：将所有的抽象方法都放在抽象类中，无论叶子节点还是容器节点都可以看见，大家都看得见的，那就是透明的。
 安全组合模式：按道理叶子节点是不应该看到容器节点内的部分方法的，就比如add（），remove（）方法，你看见是没有用的，
 如果用了还会导致错误，
 所以干脆抽象类里只放大家都有的，对于自己独有的，就不放到里面了，自己用的时候，自己实现就好了。
 */
public class Main14 {
    public static void main(String[] args) {
       IFile rootFolder=new Folder("C:");
       IFile folderA=new Folder("c:A");
       IFile folderA_a=new Folder("c:A-a");
        IFile folderA_a_a=new Folder("c:A-a_a");
       IFile folderA_a_b=new Folder("c:A-a-b");
        IFile folderB=new Folder("c:B");
       IFile fileB_b=new File("C:B_b.txt");
       rootFolder.add(folderA);
       rootFolder.add(folderB);
       folderA.add(folderA_a);
       folderA_a.add(folderA_a_a);
       folderA_a.add(folderA_a_b);
       folderB.add(fileB_b);
       DisplayTree(rootFolder,0);
    }
    public static void  DisplayTree(IFile root,int deep){
        System.out.print("第"+deep+"层");
        root.display();
        List<IFile> children = root.getChildren();
        for(IFile item : children){
            if(item instanceof File){
                System.out.print("第"+(deep+1)+"层");
                item.display();
            }else {
                DisplayTree(item,deep+1);
            }
        }
    }

}
